package com.common.framework.util;

/**
 * @author wiiyaya
 * @date 2016/6/14
 */
public final class CacheUtils {
    private CacheUtils() {
    }

    /**
     * 缓存类型
     */
    public enum CacheType {
        /**
         * String（字符串），仅该类型可以使用cacheManager和@Cacheable处理，并且expiration为0时候，表示不过期
         */
        V,

        /**
         * List（列表）
         */
        L,

        /**
         * Set（集合）
         */
        S,

        /**
         * SortedSet（有序集合）
         */
        Z,

        /**
         * Hash（哈希表）
         */
        H
    }

    /**
     * 缓存名称
     */
    public enum CacheName {

        /**
         * 手机验证码 5 分钟后过期
         */
        PHONE_AUTH_CODE(CacheType.V, 5 * 60),

        /**
         * 不过期
         */
        ORDER_NUMBER_SEQUENCE(CacheType.V, 0);

        /**
         * 缓存类型
         */
        private CacheType type;

        /**
         * 缓存前缀
         */
        private String prefix;

        /**
         * 缓存匹配器
         */
        private String regex;

        /**
         * 过期时间 SECONDS
         */
        private long expiration;

        CacheName(CacheType cacheType, long expiration) {
            this.type = cacheType;
            this.expiration = expiration;
            this.prefix = this.name().concat(":");
            this.regex = prefix.concat("*");
        }

        public long getExpiration() {
            return expiration;
        }

        public String getPrefix() {
            return prefix;
        }

        public String getRegex() {
            return regex;
        }

        public CacheType getType() {
            return type;
        }
    }
}
